Computer virtualization is a technique that involves encapsulating a physical computing machine platform into a virtual mach mine that is executed under the control of virtualization software running on a single hardware computing platform (also referred to herein as a “host computing device” or “host computer”). A group of hardware computing platforms may be organized as a cluster to provide the hardware resources for virtual machines (VMs). In a distributed computer system that employs VMs, it is common to have hundreds, even thousands, of VMs running on multiple clusters of host computing devices. Additionally, because the VMs are virtual entities, VMs can easily be moved, added, or removed from a virtual machine environment, which results in an ever changing and evolving virtual machine environment.
In a virtual machine environment, various processes running on the VMs, including individual applications running on each VM, generate data that is stored in a datastore cluster. In the case of applications, each application typically has a characteristic data access pattern which is a function of the type of data operations executed by the application. For example, a highly transactional database application may exhibit a random I/O data access pattern while a file server application, may exhibit a sequential I/O data access pattern.
Data in a datastore cluster can be distributed amongst one or more different datastores within the cluster. Each datastore can be a virtual or physical entity that is used by multiple different applications and/or multiple different VMs. Because different data access techniques can be employed by different applications and because multiple VMs can be assigned to the same datastore, applications employing different data access techniques can be assigned to the same datastore. However, it has been observed that assigning applications exhibiting random I/O access patterns to the same datastore as applications exhibiting sequential I/O access patterns can lead to a, decrease in the overall performance of the associated VMs and their associated applications.
To efficiently manage application performance in a virtual machine environment, it is desirable to avoid comingling of applications using random I/O data access techniques with applications using sequential I/O data access techniques on the same datastore. However, because virtual machine environments can include hundreds, even thousands of VMs and because virtual machine environments tend to be dynamic in nature, it is difficult to manually track and efficiently assign VMs and their applications to datastores in a way that avoids comingling of applications that utilize different data access techniques on the same datastore.